/**
 * 更新流程实例的当前处理人, 重新生成待办事项
 *
 * 输入参数:
 *
 * 输出参数:
 *    true: 更新成功
 */
(() => {
  // 私有区域

  return function ({ UID, InstanceID }) {
    // 验证输入参数
    if (!UID) throw Error("无效会话");

    // 1. 获取实例信息, 检查当前节点是否匹配
    const instance = A.card['B.流程实例'].load(InstanceID);
    if (!instance) throw Error('流程实例不存在');

    // 2. 加载流程定义
    const workflow = A.job['B.Flow_LoadDefinition']({ UID, WorkflowID: instance.流程定义.ID });
    const cur_node = workflow.node(instance.当前节点.ID);

    // 3. 加载业务数据
    const { rows: [pack] } = A.db.execute('KERNEL', "SELECT DM FROM KFB WHERE ID=?", [instance.流程定义.数据卡片.开发包.ID]);
    const full_name = (pack.DM ? pack.DM + '.' : '') + instance.流程定义.数据卡片.名称;
    const record = A.card[full_name].load(instance.数据记录);

    const userIds = Array.from(new Set(cur_node.onGetUsers({ UID, workflow, instance, record }) || []));
    if (userIds.length === 0) throw Error(`没有找到当前节点的待办用户`);

    A.db.trans('MP', conn => {
      // 清理当前节点的所有待办任务
      A.db.execute(conn, "DELETE B_LCDB WHERE LCSL_ID=?", [instance.ID]);

      userIds.forEach(id => {
        A.card['B.流程待办'].save({
          流程实例: instance.ID,
          待办用户: id,
          描述: cur_node.onGetDesc({ UID, workflow, instance, record }),
          发起用户: instance.创建用户,
          发起日期: instance.创建时间,
        }, UID);
      });
    });

    // 返回结果
    return true;
  };
})()